using System;
using System.Collections.Generic;
using Csla;
using Ent.AccesoDatos;
using System.Data;

namespace EntGuayasSLA.BL.Listas
{
    /// <summary>
    /// Estereotipo: ReadOnlyList
    /// Reponsabilidad: 
    /// Autor: 
    /// Fecha: 1/18/2014 10:19:38 AM
    /// </summary>
    [Serializable]
    public class OficiosLista : ReadOnlyListBase<OficiosLista, OficioInfo>
    {
        #region Authorization Rules

        private static void AddObjectAuthorizationRules()
        {
            // TODO: add authorization rules
            //AuthorizationRules.AllowGet(typeof(OficiosLista), "Role");
        }

        #endregion

        #region Factory Methods

        public static OficiosLista GetOficiosLista(string filter)
        {
            return DataPortal.Fetch<OficiosLista>(filter);
        }

        private OficiosLista()
        { /* require use of factory methods */ }

        #endregion

        #region Data Access

        private void DataPortal_Fetch(string criteria)
        {
            RaiseListChangedEvents = false;
            IsReadOnly = false;
            var accesoDatos = new DriveDataBase(TypeDataBase.PostgreSql);
            var parametros = new List<Parametro> 
                    {
                        new Parametro("ec_estado", criteria)
                    };
            DataSet datos = accesoDatos.EjecutarDataSet("\"LISTA_OFICIOS\"", parametros);
            foreach (DataRow items in datos.Tables[0].Rows)
            {
                this.Add(OficioInfo.GetOficioInfo(items));
            }
            IsReadOnly = true;
            RaiseListChangedEvents = true;
        }

        #endregion
    }
    /// <summary>
    /// Estereotipo: ReadOnlyChild
    /// Reponsabilidad: 
    /// Autor: USUARIO
    /// Fecha: 1/18/2014 10:19:38 AM
    /// </summary>
    [Serializable]
    public class OficioInfo : ReadOnlyBase<OficioInfo>
    {
        #region Business Methods
      
        public Guid Id { get; internal set; }
        public string ArchivoId { get; internal set; }
        public string PersonaId { get; internal set; }
        public string Numero { get; internal set; }
        public DateTime Fecha { get; internal set; }
        public string Descripcion { get; internal set; }
        public string Estado { get; internal set; }
        public DateTime FechaAprobacion { get; internal set; }
        public string ArchivoNombre { get; internal set; }
        public string PersonaNombre { get; internal set; }
        public string Comentario { get; internal set; }
        public string Version { get; internal set; }
        public string Referencia { get; internal set; }
        public string Nombre { get; internal set; }
        public string Ruta { get; internal set; }
        public string Correo { get; internal set; }
        #endregion

        #region Factory Methods

        internal static OficioInfo GetOficioInfo(DataRow childData)
        {
            return DataPortal.FetchChild<OficioInfo>(childData);
        }

        private OficioInfo()
        { /* require use of factory methods */ }

        #endregion

        #region Data Access

        private void Child_Fetch(DataRow childData)
        {
            //                       
            Id = Guid.Parse(childData["ofc_id"].ToString());
            ArchivoId  = childData["arc_id"].ToString();
            PersonaId  = childData["per_id"].ToString();
            Numero     = childData["ofc_numero"].ToString();
            Fecha      = DateTime.Parse(childData["ofc_fecha"].ToString());
            Descripcion  = childData["ofc_descripcion"].ToString();
            Estado  = childData["ofc_estado"].ToString();
            if (childData["ofc_fecha_aprob"].ToString() != "")
            FechaAprobacion = DateTime.Parse(childData["ofc_fecha_aprob"].ToString());
           
            ArchivoNombre  = childData["arc_nombre"].ToString();
            PersonaNombre  = childData["nombres"].ToString();
            Comentario = childData["arc_comentario"].ToString();

            Version = childData["arc_version"].ToString();
            Referencia = childData["arc_referencia"].ToString();
            Nombre = childData["arc_nombre"].ToString();
            Ruta = childData["arc_ruta"].ToString();
            Correo = childData["ofc_mail"].ToString();
        }

        #endregion
    }
}
